Środowisko pracy A2plus to zewnętrzne środowisko do wykonywania złożeń różnych części w programie FreeCAD.
Niniejsza dokumentacja opisuje wersję A2plus 0.4.56 lub nowszą.
Środowisko pracy A2plus jest dodatkiem do programu FreeCAD. Można je łatwo zainstalować za pomocą Menadżera dodatków z menu Przybory → Menadżer dodatków.
A2plus jest w trakcie aktywnego rozwoju i będzie często wzbogacany o nowe funkcje. Dlatego warto go regularnie aktualizować, również za pomocą narzędzia w menu Przybory → Menadżer dodatków.
Kod A2plus jest przechowywany i rozwijany na GitHub i może być również zainstalowany ręcznie poprzez skopiowanie go do katalogu Mod programu FreeCAD.
Na początku przejdź do paska narzędzi A2plus w programie FreeCAD. Aby utworzyć złożenie, utwórz nowy plik w programie FreeCAD. Na początku plik ten musi zostać zapisany. Zaleca się (ale nie jest to konieczne), aby zapisać go w tym samym folderze, w którym znajdują się części, z których ma zostać wykonany montaż.
Teraz części można dodawać do złożenia za pomocą przycisku na pasku narzędzi lub
. Przycisk
dodaje wszystkie bryły w wybranym pliku jako jedną część. Używając przycisku
możesz wybrać, jaki element z pliku ma zostać zaimportowany jako część. W ten sposób można na przykład zaimportować tylko szkic, a następnie złożyć kolejne części, używając szkicu do określenia pozycji części.
Pierwsza dodana część otrzymuje domyślnie stałą pozycję. (Można to zmienić później za pomocą właściwości części DANEfixed Position).
Części, które już znajdują się w złożeniu, można klonować za pomocą przycisku z paska narzędzi .
Aby edytować część ze złożenia, zaznacz ją w drzewie modelu i użyj przycisku na pasku narzędzi . Spowoduje to otwarcie części w nowej zakładce w programie FreeCAD lub przełączenie do jej zakładki, jeśli plik jest już otwarty.
Aby zaktualizować części zmodyfikowane w złożeniach kliknij na przycisk na pasku narzędzi . Przycisk paska narzędzi
również importuje części, ale rekurencyjnie przez możliwe montaż podzespołów. Jeśli zaznaczysz jedną lub kilka części w widoku drzewa programu FreeCAD, A2plus poprosi Cię o aktualizację tylko wybranych części.
Zaimportowane części zachowują swoje zewnętrzne zależności i można je edytować. W przypadku ściśle zdefiniowanych części, takich jak śruby, warto jednak, aby ich kształt nie mógł być edytowany. Można to osiągnąć za pomocą przycisku na pasku narzędzi , który przekształca wybraną część w statyczną kopię części oryginalnej.
Aby zapisać złożenie i zamknąć je po zakończeniu, można użyć przycisku paska narzędzi .
Przełączanie przycisku paska narzędzi ustawia sposób, zaznaczenia kilku krawędzi, ścian itp.: albo za pomocą pojedynczego kliknięcia, albo używając Ctrl + kliknięcie.
Montaż części odbywa się poprzez dodawanie więzów pomiędzy częściami. Po wprowadzeniu wiązania środowisko pracy A2plus przesuwa części zgodnie z wiązaniem, jeśli jest to możliwe.
Aby utworzyć wiązanie między częściami, przytrzymaj wciśnięty klawisz Ctrl i zaznacz każdą krawędź lub powierzchnię dwóch części. Następnie kliknij przycisk na pasku narzędziowym żądanego wiązania. Pojawi się okno dialogowe opisane w rozdziale wiązania. Wiązanie zostanie dodane do drzewa modelu dołączonego do części, których dotyczy.
W przypadku złożonych wiązań między częściami środowisko pracy A2plus może nie wykonać rozwiązania wiązań. W związku z tym zapoznaj się również z punktem Rozwiązywanie problemów, aby poznać strategie rozwiązywania takich przypadków.
Im więcej części dodajesz, tym ważniejsze jest, aby je śledzić. Dlatego A2plus oferuje narzędzia do przenoszenia i przeglądania części:
Podczas tworzenia wiązania takie okno dialogowe zostanie wyświetlone po naciśnięciu przycisku paska narzędziowego wiązania:
Powyżej: Okno dialogowe właściwości wiązań A2plus
W przypadku niektórych wiązań można modyfikować kierunek wiązania. Za pomocą przycisku Rozwiąż można wcześniej sprawdzić, czy to nowe wiązanie może być rozwiązane przez A2plus. Jeśli nie, zajrzyj do rozdziału Rozwiązywanie problemów.
Wiązania można wyłączyć, zmieniając ich widzialność. Robi się to przez wybranie wiązania w widoku drzewa i naciśnięcie klawisza Spacja. Powoduje to włączenie właściwości DANEStłumione. Wyciszone wiązanie nie jest brane pod uwagę podczas rozwiązywania zespołu.
A2plus zapewnia następujące wiązania:
Wybierz wierzchołek (punkt), okrąg lub sferę na każdej części. Jeśli wybrano okrąg lub sferę, to jej punkt środkowy zostanie użyty w Wiązaniu. Przycisk na pasku narzędzi dodaje wiązanie PunktIdentyfikacja, które sprawia, że wierzchołki są zbieżne.
Wybierz wierzchołek (punkt), lub okrągłą krawędź (wybierze jej punkt środkowy), lub kulistą ścinę (również wybierze jej punkt środkowy) na jednej części i krawędź na drugiej. Przycisk paska narzędzi dodaje wiązanie PunktNaLinii. Spowoduje ono umieszczenie wierzchołka na krawędzi.
Wybierz wierzchołek (punkt), okrągłą krawędź (zostanie wybrany jej punkt środkowy) lub kulistą ścianę (również zostanie wybrany jej punkt środkowy) na jednej części i płaszczyznę na drugiej części. Przycisk paska narzędzi dodaje wiązanie Punkt na płaszczyźnie. W oknie dialogowym wiązania można określić przesunięcie między punktem a płaszczyzną. Przesunięcie to można również przerzucić między obiema stronami płaszczyzny. Jeśli przesunięcie wynosi zero, ograniczenie spowoduje umieszczenie wierzchołka na płaszczyźnie.
Wybierz sferyczną powierzchnię lub wierzchołek (punkt) na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie sphereCenterIdent (sfera o wspólnym środku). Sprawi ono, że środki sfer, środki sfery i wierzchołka lub wierzchołki będą się pokrywać.
Wybierz okrągłą krawędź krawędź na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie circularEdge. W oknie dialogowym wiązania można określić przesunięcie między krawędziami. To przesunięcie może być również odwrócone. Ponadto można ustawić kierunek wiązania i zablokować obrót części. Jeśli przesunięcie wynosi zero, wiązanie spowoduje, że krawędzie będą koncentrycznie leżeć w tej samej płaszczyźnie.
Wybierz cylindryczną Powierzchnię lub liniową Krawędź na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie Zbieżność osi. W oknie dialogowym wiązania można określić kierunek osi. W oknie tym można również zablokować obrót części. Wiązanie spowoduje, że osie lub linie będą zbieżne.
Wybierz cylindryczną powierzchnię lub liniową krawędź na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie równoległości osi. W oknie dialogowym ograniczenia można określić kierunek osi. Ograniczenie sprawi, że osie lub linie będą równoległe.
Wybierz cylindryczną powierzchnię lub liniową krawędź na jednej części i płaszczyznę na drugiej części. Przycisk paska narzędzi dodaje wiązanie Oś na płaszczyźnie równoległej. Dzięki temu wiązaniu oś lub prosta będzie równoległa do płaszczyzny.
Wybierz cylindryczną powierzchnię lub liniową krawędź na jednej części i płaszczyznę na drugiej części. Przycisk paska narzędzi dodaje wiązanie Oś na płaszczyźnie normalnej. Wiązanie spowoduje, że oś lub linia będzie normalna do płaszczyzny.
Wybierz cylindryczną powierzchnię lub liniową krawędź na jednej części i płaszczyznę na drugiej części. Przycisk paska narzędzi dodaje wiązanie axisPlaneAngleAngle. Początkowo wiązanie sprawi, że oś będzie równoległa do płaszczyzny. Następnie można dostosować kąt dla osi w pojawiającym się oknie dialogowym ustawień wiązania.
Zaznacz płaszczyznę na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie RównoległePłaszczyzny. W oknie dialogowym wiązania można określić kierunek wiązania. Użycie tego wiązania spowoduje, że płaszczyzny będą równoległe.
Wybierz płaszczyznę na obu częściach. Przycisk na pasku narzędzi dodaje wiązanie Zbieżność płaszczyzn. Okno dialogowe wiązania pozwala określić kierunek wiązania i przesunięcie między płaszczyznami. Przesunięcie to może być również odwrócone. Jeśli przesunięcie wynosi zero, wiązanie spowoduje, że płaszczyzny będą się pokrywać.
Wybierz płaszczyznę na obu częściach. Przycisk paska narzędzi dodaje wiązanie angledPlanes. Okno dialogowe wiązania pozwala określić kąt między płaszczyznami. Wiązanie sprawi, że płaszczyzny będą najpierw równoległe, a następnie ustawi określony kąt.
Wybierz zamkniętą krawędź lub płaszczyznę na obu częściach. Przycisk paska narzędzi dodaje ograniczenie centerOfMass. Okno dialogowe wiązania pozwala określić przesunięcie między krawędziami lub płaszczyznami. Przesunięcie to można również odwrócić. Ponadto można ustawić kierunek wiązania i zablokować obrót części. Jeśli przesunięcie wynosi zero, wiązanie umieści krawędzie lub płaszczyzny w tej samej płaszczyźnie.
Złożenie może zawierać inne złożenia. Dodaje się je jak części, naciskając przycisk paska narzędzi i wybierając plik *.FCStd zawierający zespół. Takie podzespoły mogą być również edytowane jak części za pomocą przycisku paska narzędzi
. W przypadku wyższych etapów montażu należy upewnić się, że zespół został zaktualizowany rekursywnie za pomocą przycisku paska narzędzi
po wprowadzeniu zmian.
Możliwe wiązania dla zaznaczenia są wyświetlane na pasku narzędzi i w oknie dialogowym Narzędzia wiązań poprzez włączenie odpowiednich przycisków. Okno dialogowe Narzędzia wiązań jest otwierane za pomocą przycisku na pasku narzędzi . Powinno ono pozostać otwarte, aby móc szybko dodać kilka wiązań do zespołu.
Istniejące wiązania mogą być edytowane poprzez zaznaczenie ich w drzewie modelu, a następnie dwukrotne kliknięcie na nie lub użycie przycisku na pasku narzędzi . Umożliwi to otwarcie okna dialogowego Właściwości wiązania.
Wiązania można tymczasowo wyciszyć, zaznaczając je w drzewie modelu i zmieniając właściwość elementu drzewa DANEStłumione.
Wiązania mogą zostać usunięte poprzez zaznaczenie ich w drzewie modelu i naciśnięcie przycisku Del lub poprzez zaznaczenie części z wiązaniami w drzewie modelu i użycie przycisku paska narzędzi .
Wszystkie wiązania mogą być rozwiązane w dowolnym momencie za pomocą przycisku paska narzędzi . Jeśli przycisk paska narzędzi
jest włączony, rozwiązanie jest wykonywane automatycznie po każdej edycji wiązania.
Przycisk paska narzędzi wpływa na ostatnio dodane wiązanie. Odwraca on kierunek wiązania.
Za pomocą narzędzia można wyświetlać i sprawdzać istniejące wiązania. Po kliknięciu pojawi się okno dialogowe. Następnie należy wybrać część w drzewie i kliknąć przycisk Importuj z drzewa, aby uzyskać wszystkie wiązania tej części, lub wybrać jedno lub więcej wiązań w drzewie i kliknąć przycisk Importuj z drzewa. W rezultacie otrzymasz wszystkie informacje o ograniczeniach. Klikając w kolumnie "Pomiń" można wyłączyć pojedyncze wiązanie. Więcej informacji można znaleźć w podpowiedziach innych przycisków okna dialogowego.
Aby stworzyć listę części dla złożenia, poszczególne części złożenia muszą otrzymać informacje, które mogą być odczytane przez A2plus. Robi się to poprzez edycję części za pomocą przycisku na pasku narzędzi . W otwartej części naciśnij przycisk paska narzędzi
i zostanie utworzony arkusz kalkulacyjny nazwany #PARTINFO#.
Struktura arkusza kalkulacyjnego wygląda następująco:
Wypełnij szare pola informacjami, które chcesz mieć na docelowej liście części.
W złożeniu lub podzespole użyj przycisku paska narzędzi . Pojawi się pytanie, czy chcesz iterować rekurencyjnie po wszystkich podzespołach. Kliknij na Yes. Spowoduje to utworzenie nowego arkusza kalkulacyjnego o nazwie #PARTSLIST#. Zawiera on informacje z różnych arkuszy kalkulacyjnych #PARTSINFO# części na liście takiej jak ta:
Pozycja (POS) jest automatycznie ustawiana zgodnie z wyglądem części w drzewie modelu. Część najwyższego poziomu otrzyma POS 1.
Ilość (QTY) jest automatycznie obliczana na podstawie złożenia. Jeśli część występuje dwukrotnie w zespole, otrzyma QTY 2.
Jeśli zaktualizowałeś informacje o części, możesz odświeżyć listę części, naciskając ponownie przycisk paska narzędzi .
Dla złożeń podrzędnych można również utworzyć arkusz informacyjny za pomocą przycisku paska narzędzi . Podczas tworzenia lub aktualizowania listy części głównego złożenia informacje te będą używane, jeśli klikniesz Nie na pytanie, czy chcesz iterować rekurencyjnie po wszystkich podzespołach. Wówczas różne części nie znajdują się na liście części, a jedynie w złożeniach podrzędnych.
Przycisk paska narzędzi tworzy plik HTML ze strukturą złożenia. Plik zostanie domyślnie utworzony w folderze pliku złożenia. Struktura wygląda następująco:
Przycisk oznacza każdą część złożenia z jej stopniami swobody. Ponadto wyświetla listę wszystkich części i ich zależności. Lista jest wyprowadzana do widżetu FreeCAD Widok raportu. Jeśli widżet ten nie jest obecnie widoczny, można go wyświetlić, klikając prawym przyciskiem myszy pustą część obszaru paska narzędzi FreeCAD, a następnie wybierając go w wyskakującym menu podręcznym lub za pomocą menu Widok → Panele → Widok raportu.
Etykiety stopni swobody można usunąć, klikając ponownie przycisk .
Przycisk oznacza każdą część złożenia w widoku 3D jej nazwą. Etykiety części można usunąć, klikając ponownie przycisk
.
Czasami konieczne jest połączenie całego złożenia w jeden kształt. Kształt ten może być następnie użyty do drukowania 3D w środowisku Siatka lub do rysowania w środowisku Rysunek Techniczny. Jest on tworzony za pomocą przycisku paska narzędzi . Kształt nie jest domyślnie widoczny. Użyj tego samego przycisku paska narzędzi, aby zaktualizować kształt w przypadku zmian w złożeniu.
Za pomocą opcji menu A2plus → Misc → Konwertuj bezwzględne ścieżki importowanych części na względne można konwertować ścieżki importowanych części.
Dostęp do konfiguracji środowiska pracy A2plus można uzyskać poprzez menu FreeCAD Edycja → Preferencje ... i tam w sekcji A2plus. Można ustawić następujące opcje:
Użycie rozwiązywania układów cząstkowych: Rozwiązywanie rozpoczyna się od części, która ma właściwość DANEPozycja ustalona ustawioną na Prawda
i części do niej związanej. Wszystkie pozostałe części nie podlegają obliczeniom. Jeśli uda się znaleźć rozwiązanie, do obliczeń dodawana jest następna związana część i tak dalej.
Użyj "magnetycznego" solwera, rozwiązującego wszystkie części naraz: Solwer próbuje przesunąć wszystkie części naraz w kierunku części, która ma właściwość DANEPozycja ustalona ustawioną na "true". Należy pamiętać, że w większości przypadków obliczenie rozwiązania zajmie więcej czasu.
Wymuś stałą pozycję: Ustawia właściwość DANEPozycja ustalona na wartość Prawda
dla wszystkich części w złożeniu. Wówczas nie są wykonywane żadne obliczenia, ponieważ wszystkie części będą zawsze ustawione w pozycjach, w których zostały utworzone.
Uwaga: Ta funkcja jest bardzo eksperymentalna i nie jest zalecana w przypadku ważnych projektów.
Znane problemy:
Włącz rekurencyjną aktualizację importowanych części: Otwiera rekurencyjnie wszystkie zespoły podrzędne w celu ich aktualizacji.
Pokaż wiązania na pasku narzędzi: Jeśli ta opcja nie jest używana, przyciski paska narzędzi dla różnych wiązań nie są widoczne, aby zaoszczędzić miejsce na pasku narzędzi. Nowe wiązania można nadal ustawiać za pomocą okna dialogowego Narzędzia wiązań (przycisk paska narzędzi ).
Użyj natywnego menedżera plików systemu operacyjnego: Jeśli ta opcja jest używana, podczas wybierania plików dla złożeń wyświetlane jest okno dialogowe plików systemu operacyjnego.
Prędzej czy później pojawi się problem, że środowisko A2plus nie może rozwiązać ustalonych wiązań. Aby temu zaradzić, istnieją różne strategie:
Jest to najbezpieczniejsza metoda, gdy masz kilka ograniczeń, ponieważ narzędzie to próbuje rozwiązać jedno wiązanie po drugim, dopóki nie znajdzie konfliktowego wiązania. Następnie można przejść do innych strategii, aby rozwiązać zidentyfikowane wiązanie. Narzędzie jest wywoływane za pomocą przycisku na pasku narzędzi .
Czasami wiązania wydają się być spójnie zdefiniowane, ale mimo to nie można ich rozwiązać. Przykład: Załóżmy, że masz wiązanie Równoległe płaszczyzny ustawione dla dwóch płaszczyzn. Teraz chcesz ustawić dla tych samych płaszczyzn wiązanie Płaszczyzna na płaszczyźnie i A2plus nie może tego rozwiązać. Wtedy kierunki wiązań Równoległe płaszczyzny i Płaszczyzna na płaszczyźnie są różne. Użyj tego samego kierunku dla obu wiązań, aby to naprawić.
Środowisko pracy A2plus oferuje automatyczne sprawdzanie właściwego kierunku dla wszystkich wiązań złożenia za pomocą przycisku paska narzędzi .
Większość przypadków nierozwiązywalnych wiązań występuje bezpośrednio podczas dodawania nowego wiązania. Rozwiązaniem jest usunięcie ostatnio dodanego wiązania. A2plus również to zaproponuje.
Czasami strategia usuwania jest jedyną, na przykład podczas edycji części w programie FreeCAD, tak że brakuje ścian lub krawędzi połączonych z wiązaniami. Powinieneś wtedy usunąć jedno wiązanie, które jest połączone ze zmienioną częścią na raz. Użyj przycisku paska narzędzi po każdym usunięciu, aby sprawdzić, czy osiągnąłeś stan rozwiązywalny.
Gdy masz złożenie, które można rozwiązać, dodaj krok po kroku potrzebne wiązania.
W niektórych przypadkach solver potrzebuje tylko lepszych wartości początkowych, aby rozwiązać powiązania. Weźmy na przykład przypadek, w którym masz część osi i część koła. Dodajesz wiązanie zbieżność Osi i nie otrzymujesz informacji, że solver zawiódł, ale części nie są odpowiednio przesuwane, a w widżecie "Widok raportu" FreeCAD widzisz "REACHED POS-ACCURACY :0.0". Rozwiązaniem jest przesunięcie części bliżej pozycji, którą chcesz uzyskać za pomocą wiązania.
Uwaga: Upewnij się, że przynajmniej jedna część wiązania ma właściwość DANEPozycja ustalona ustawioną na Fałsz
.
Jeśli po zaimportowaniu do złożenia A2plus brakuje niektórych funkcji części, należy sprawdzić właściwość DANECzubek.
Środowisko pracy A2plus importuje bryły części ze wszystkimi ich cechami aż do cechy Czukek. Jest to rozsądne, ponieważ ustawienie właściwości Czubek na określoną cechę oznacza, że wszystkie cechy za nim nie powinny pojawić się w gotowej części. Jeśli więc przegapisz cechę części w A2plus, otwórz część za pomocą przycisku paska narzędzi , a następnie wybierz bryłę i spójrz na jej właściwość DANECzubek. Jeśli końcówka nie znajduje się w wybranym miejscu, kliknij prawym przyciskiem myszy w miejscu, w którym powinna się znajdować i wybierz
Ustaw czubek. Na koniec zapisz część i przeładuj złożenie za pomocą przycisku na pasku narzędzi
.
Jeśli nie widzisz wyraźnego powodu, dla którego niektóre ograniczenia nie mogą zostać rozwiązane, możesz spróbować użyć przycisku paska narzędzi . Spowoduje to rozwiązanie wszystkich wiązań i ponowne pogrupowanie ich pod różnymi częściami.
Zespoły utworzone za pomocą środowiska A2plus starszego niż marzec 2019 r. nie wyświetlają prawidłowych ikon dla importowanych części i mają przestarzałe właściwości. Złożenia te można zmigrować do A2plus w wersji 0.4.35 i nowszej za pomocą opcji menu A2plus → Misc → . Migruj proxy zaimportowanych części. Po wykonaniu tej czynności należy zapisać i ponownie otworzyć plik złożenia.
Ta strategia nie jest konieczna dla systemu Windows.
W niektórych systemach operacyjnych mogą wystąpić problemy, jeśli nazwy plików lub ścieżki plików części lub zespołu zawierają znaki akcentowane. Dlatego należy unikać takich znaków, a także generalnie znaków specjalnych.
Ta strategia nie jest już konieczna w przypadku złożeń utworzonych za pomocą A2plus 0.3.11 lub nowszej wersji, ponieważ A2plus wydaje teraz ostrzeżenie o braku ustalonych pozycji.
Po ustawieniu wiązania między dwiema częściami, gdy żadna część nie ma właściwości DANEustalona pozycja ustawionej na Prawda
lub jest połączona wiązaniem z częścią z DANEustalona pozycja ustawioną na Prawda
, wiązanie nie może zostać rozwiązane. To samo dzieje się, jeśli obie części wiązania mają DANEfixed Position ustawione na Prawda
.
Następnie A2plus wyświetla informacje o nieudanym rozwiązaniu, ale czasami widać tylko, że części nie zostały odpowiednio przesunięte, a w widżecie "Widok raportu" FreeCAD widać "REACHED POS-ACCURACY :0.0". Oznacza to, że solver zakończył pracę bez błędów, ale w rzeczywistości nie mógł rozwiązać wiązań.
Dlatego sprawdź, czy przynajmniej jedna z części w złożeniu ma właściwość DANEustalona pozycja ustawioną na "true". Następnie upewnij się, że ustawiłeś ograniczenia tylko dla części, która jest w jakiś sposób połączona z częścią stałą. Aby zwizualizować te zależności, zobacz sekcję Struktura złożenia.
Ta strategia nie jest już konieczna w przypadku złożeń utworzonych za pomocą środowiska pracy A2plus 0.4.0 lub nowszego, ponieważ A2plus automatycznie obraca części w tle, aby uzyskać wystarczający kąt początkowy dla solwera.
Solver często kończy się niepowodzeniem dla wiązania kątowePłaszczyzny, jeśli dwie wybrane płaszczyzny mają obecnie kąt 0° lub 180°. (Części nie są odpowiednio przesuwane, a w widżecie "Widok raportu" programu FreeCAD wyświetlany jest komunikat "REACHED POS-ACCURACY :0.0"). Rozwiązaniem tego problemu jest obrócenie jednej części o kilka stopni za pomocą funkcji transformacji FreeCAD (kliknij prawym przyciskiem myszy część w drzewie modelu i wybierz z menu kontekstowego Przemieszczenie).
Uwaga: Upewnij się, że przynajmniej jedna część wiązania ma właściwość DANEPozycja ustalona ustawioną na Fałsz
.
A2plus oferuje animacje za pomocą przeciągania oraz skryptów Pythona.
Animacje przeciągania są interaktywne, ponieważ uruchamia się je poprzez przeciągnięcie części złożenia. Aby uzyskać tego rodzaju animacje:
Oto przykładowy zestaw do wypróbowania animacji przeciągania: A2p_example-for-dragging-animation.FCStd.
Powyżej: Animacja przeciągania przy użyciu przykładowego złożenia.
Pomimo tego, że tryb przeciągania oferuje ładne interaktywne animacje, czasami nie są one wystarczająco precyzyjne dla screencastów lub filmów. Animacje skryptowe mają tę zaletę, że animują ruchy i obroty w określony sposób. Można na przykład obrócić część o dokładnie 10° w przód i w tył. Poniższe przykłady wykorzystują złożenie, w którym część powinna zostać obrócona. Jeśli spróbujesz animować to za pomocą trybu przeciągania, zobaczysz, jak trudno jest uzyskać obrót w przód iw tył, który można np. pokazać szefowi w prezentacji. Dzięki interaktywnemu skryptowi przykładowemu jest to jednak łatwe zadanie.
Animacja skryptowa działa zazwyczaj w ten sposób:
Zamiast parametru rozmieszczenia można również zmienić ograniczenie, na przykład odległość między 2 płaszczyznami.
Najprostszym sposobem tworzenia skryptów animacji jest animacja nieinteraktywna, która podąża za zdefiniowanym ruchem. Oto przykład: Najpierw pobierz ten plik złożenia: A2p_animated-example.FCStd, a także ten skrypt Python: A2p_animation-example-script.py.
Jest to zawartość skryptu, a linie zaczynające się od "#" opisują, co robią poszczególne linie skryptu:
# import bibliotek
import time, math, PySide
import A2plus.a2p_solversystem as a2p_solver
# używamy kroków co 1 stopień
step = 1
# odczekaj 1 ms między każdym krokiem
timeout = 0.001
# początkowy kąt wynosi 0 stopni
angle = 0
# bierzemy aktualnie otwarty dokument
document = FreeCAD.activeDocument()
# chcemy później zmienić kąt obrotu części "star_wheel_001"
starWheel = document.getObject("star_wheel_001")
# zdefiniuj okno dialogowe postępu działające od 0 do 360
progressDialog = PySide.QtGui.QProgressDialog(u " Animation progress", u " Stop", 0, 360)
# blok while jest główną pętlą zmieniającą kąt i rozwiązującą
# ograniczenia montażowe następnie
while angle < 360: # wykonuj tę pętlę, aż uzyskamy jeden pełny obrót (360 stopni)
# zwiększyć kąt obrotu
angle += step
# ustaw nowy kąt w oknie dialogowym postępu
progressDialog.setValue(angle)
# zmień kąt obrotu części "star_wheel_001"
starWheel.Placement.Rotation.Angle = math.radians(angle)
# rozwiąż ograniczenia
a2p_solver.solveConstraints(document, useTransaction=True)
# zaktualizuj widok po rozwiązaniu ("Gui" oznacza "graficzny interfejs użytkownika")
FreeCADGui.updateGui()
# przenieś okno dialogowe postępu na przód
PySide.QtGui.QWidget.raise_(progressDialog)
# jeśli w oknie dialogowym naciśnięto "Stop", wyjdź z pętli
if progressDialog.wasCanceled():
angle = 360
# odczekaj jakiś czas przed wykonaniem następnego kroku
time.sleep(timeout)
Aby użyć skryptu do wykonania animacji, musimy
Aby poćwiczyć, po prostu zmień coś w skrypcie i wykonaj go później. Na przykład zwiększyć "krok" do "5".
Oto wynik przykładowej animacji:
Pierwszy przykład skryptu pokazał, jak utworzyć animację bez żadnej informacji zwrotnej od użytkownika. W przypadku większości aplikacji konieczna jest interakcja z animacją. Na przykład interesującą kwestią w tym przykładzie jest zobaczenie, jak szpilki napędowe przecinają środkowy rowek koła. Aby przyjrzeć się temu bliżej, można zaprezentować ten szczegół współpracownikom lub szefowi. Dlatego potrzebne jest interaktywne rozwiązanie.
Można to zrobić za pomocą niestandardowego okna dialogowego animacji z suwakiem. Przesuwając suwak można ustawić kąt obrotu, a tym samym obracać się tam i z powrotem w interesującej pozycji.
Używamy tego samego pliku asemblera: A2p_animated-example.FCStd i tego skryptu Pythona: A2p_animation-example-script.py.
Jest to treść skryptu, który wyświetla interaktywne okno dialogowe animacji:
# import bibliotek
import time, math, PySide, sys
import FreeCAD.A2plus.a2p_solversystem as a2p_solver
from FreeCAD import Units
from PySide import QtCore, QtGui
# odczekać 1 ms po każdym obliczeniu
timeout = 0.001
# pobieramy aktualnie otwarty dokument
document = FreeCAD.activeDocument()
# chcemy później zmienić kąt obrotu części "star_wheel_001"
starWheel = document.getObject("star_wheel_001")
class AnimationDlg(QtGui.QWidget): # okno dialogowe animacji
def __init__(self): # to initialize the dialog
super(AnimationDlg, self).__init__()
self.initUI()
def initUI(self): # definicja komponentów okna dialogowego
self.setMinimumSize(self.minimumSizeHint()) # set the minimal dialog size to minimum
self.setWindowTitle('Animation Dialog')
# używać układu siatki dla całego formularza
self.mainLayout = QtGui.QGridLayout()
self.lineNo = 0 # first dialog grid line
# Dodaj etykietę opisu
DescriptionLabel = QtGui.QLabel(self)
DescriptionLabel.setText("Change slider to change rotation angle")
self.mainLayout.addWidget(DescriptionLabel,self.lineNo,0,1,4)
# następny wiersz okna dialogowego
self.lineNo += 1
# dodaje etykietę; nie ma potrzeby stosowania przedrostka "self.", ponieważ nie chcemy później zmieniać etykiety.
LabelMin = QtGui.QLabel(self)
LabelMin.setText("Min")
LabelMin.setFixedHeight(32)
self.mainLayout.addWidget(LabelMin,self.lineNo,0)
# dodać edycję obrotową, aby zdefiniować minimum suwaka
self.MinEdit = QtGui.QSpinBox(self)
# pobiera jednostkę kąta jako ciąg znaków
self.MinEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
self.MinEdit.setMaximum(999)
self.MinEdit.setMinimum(0)
self.MinEdit.setSingleStep(10)
self.MinEdit.setValue(0)
self.MinEdit.setFixedHeight(32)
self.MinEdit.setToolTip("Minimal angle for the slider")
QtCore.QObject.connect(self.MinEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMinEdit)
self.mainLayout.addWidget(self.MinEdit,self.lineNo,1)
# dodaj suwak
self.slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
self.slider.setRange(0, 360)
self.slider.setValue(0)
self.slider.setFixedHeight(32)
self.slider.setToolTip("Move the slider to change the rotation angle")
QtCore.QObject.connect(self.slider, QtCore.SIGNAL("sliderMoved(int)"), self.handleSliderValue)
self.mainLayout.addWidget(self.slider,self.lineNo,2)
# dodaj etykietę
LabelMax = QtGui.QLabel(self)
LabelMax.setText("Max")
LabelMax.setFixedHeight(32)
self.mainLayout.addWidget(LabelMax,self.lineNo,3)
# dodaje edycję obrotową, aby zdefiniować maksimum suwaka
self.MaxEdit = QtGui.QSpinBox(self)
# pobiera jednostkę kąta jako ciąg znaków
self.MaxEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
self.MaxEdit.setMaximum(999)
self.MaxEdit.setMinimum(1)
self.MaxEdit.setSingleStep(10)
self.MaxEdit.setValue(360)
self.MaxEdit.setFixedHeight(32)
self.MaxEdit.setToolTip("Maximal angle for the slider")
QtCore.QObject.connect(self.MaxEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMaxEdit)
self.mainLayout.addWidget(self.MaxEdit,self.lineNo,4)
# następny wiersz okna dialogowego
self.lineNo += 1
# dodaje element dystansowy
self.mainLayout.addItem(QtGui.QSpacerItem(10,10), 0, 0)
# dodaje etykietę
LabelCurrent = QtGui.QLabel(self)
LabelCurrent.setText("Current angle:")
LabelCurrent.setFixedHeight(32)
self.mainLayout.addWidget(LabelCurrent,self.lineNo,1)
# wyświetla bieżący kąt
self.CurrentAngle = QtGui.QLineEdit(self)
self.CurrentAngle.setText(str(0))
self.CurrentAngle.setFixedHeight(32)
self.CurrentAngle.setToolTip("Current rotation angle")
self.CurrentAngle.isReadOnly()
self.mainLayout.addWidget(self.CurrentAngle,self.lineNo,2)
# dodaje etykietę dla urządzenia
LabelUnit = QtGui.QLabel(self)
LabelUnit.setText("deg")
LabelUnit.setFixedHeight(32)
self.mainLayout.addWidget(LabelUnit,self.lineNo,3)
# aby zamknąć okno dialogowe
self.Close = QtGui.QPushButton(self)
self.Close.setText("Close")
self.Close.setFixedHeight(32)
self.Close.setToolTip("Closes the dialog")
QtCore.QObject.connect(self.Close, QtCore.SIGNAL("clicked()"), self.CloseClicked)
self.mainLayout.addWidget(self.Close,self.lineNo,4)
# place the defined grid layout to the dialog
self.setLayout(self.mainLayout)
self.update()
def handleSliderValue(self):
# ustawia wartość suwaka jako kąt
starWheel.Placement.Rotation.Angle = math.radians(self.slider.value())
# kąt prądu wyjściowego
self.CurrentAngle.setText(str(self.slider.value()))
# rozwiązywanie wiązań
a2p_solver.solveConstraints(document)
# aktualizacja widoku po rozwiązaniu ''("Gui" oznacza "graficzny interfejs użytkownika")''
FreeCADGui.updateGui()
# odczekaj trochę czasu, ważne jest, aby dać czas na wykonanie obliczeń.
time.sleep(timeout)
def setMinEdit(self):
# upewnij się, że minimum jest mniejsze niż maksimum
if self.MinEdit.value() >= self.MaxEdit.value():
self.MaxEdit.setValue(self.MinEdit.value() + 1)
self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())
def setMaxEdit(self):
# upewnić się, że minimum jest mniejsze niż maksimum
if self.MinEdit.value() >= self.MaxEdit.value():
self.MinEdit.setValue(self.MaxEdit.value() - 1)
self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())
def CloseClicked(self):
AnimationDialog.close()
# utwórz i wyświetl zdefiniowane okno dialogowe
AnimationDialog = AnimationDlg()
AnimationDialog.show()
# uruchom tę pętlę, gdy okno dialogowe jest widoczne
while AnimationDialog.isVisible():
# aktualizacja widoku; ważne, aby system operacyjny otrzymał informację zwrotną, że okno dialogowe jest aktywne
FreeCADGui.updateGui()
# przeniesienie okna dialogowego na przód, tak aby było ono zawsze widoczne
QtGui.QWidget.raise_(AnimationDialog)
# wartość wyjściowa suwaka również tutaj, ponieważ podczas obliczeń suwak mógł zostać przesunięty
AnimationDialog.CurrentAngle.setText(str(AnimationDialog.slider.value()))
Okno dialogowe zdefiniowane w skrypcie wygląda następująco:
Aby lepiej zrozumieć składnię skryptu, oto kilka informacji o poleceniach:
starWheel.Placement.Rotation.Angle = math.radians(angle)
Tutaj zmieniamy właściwość umieszczania Rotation.Angle
części otrzymanej wcześniej jako starWheel
. Ta właściwość pobiera kąt jako radian. Funkcja radians()
z biblioteki math
konwertuje kąt ze stopni na radiany.
Właściwość Rotation.Angle
wykorzystuje bieżącą oś umieszczenia części (w naszym przykładzie oś X). Aby obrócić część np. wokół osi Z, można ustawić oś obrotu (przed wywołaniem polecenia obrotu) za pomocą polecenia:
starWheel.Placement.Rotation.Axis = FreeCAD.Vector(0,0,1)
Zamiast obracać, części można również przesuwać. Aby zmienić na przykład położenie koła w kierunku Y, polecenie brzmiałoby:
starWheel.Placement.Base.y = PositionShift
W tym przypadku nie definiowalibyśmy zmiennej angle
, ale PositionShift
, którą zmieniamy przy każdym przebiegu pętli.
Istnieją różne sposoby ustawiania położenia części. Niektóre z nich są udokumentowane na stronie Umiejscowienie. Niestety nie ma (jeszcze) listy wszystkich możliwych poleceń umiejscowienia.
a2p_solver.solveConstraints(document, useTransaction=False/True)
Jest to polecenie specyficzne dla środowiska pracy A2plus. Rozwiązuje ono wiązania złożenia, które wcześniej otrzymaliśmy jako document
. Opcja useTransaction
określa, czy FreeCAD powinien przechowywać każdą zmianę w stosie cofania / ponawiania. W przypadku dużych animacji można więc ustawić ją na false
.